/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fr.cggveritas.crewintranet.jms.dao.jpacontroller;

import fr.cggveritas.crewintranet.jms.dao.jpacontroller.exceptions.IllegalOrphanException;
import fr.cggveritas.crewintranet.jms.dao.jpacontroller.exceptions.NonexistentEntityException;
import fr.cggveritas.crewintranet.jms.dao.jpacontroller.exceptions.PreexistingEntityException;
import java.io.Serializable;
import javax.persistence.Query;
import javax.persistence.EntityNotFoundException;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import fr.cggveritas.crewintranet.jms.entities.CvCompagnie;
import fr.cggveritas.crewintranet.jms.entities.CvTypedecontrat;
import fr.cggveritas.crewintranet.jms.entities.CvTravailleur;
import fr.cggveritas.crewintranet.jms.entities.CvSalaire;
import fr.cggveritas.crewintranet.jms.entities.CvHistoriquechangementsalaire;
import java.util.ArrayList;
import java.util.List;
import fr.cggveritas.crewintranet.jms.entities.CvTravailprime;
import fr.cggveritas.crewintranet.jms.entities.CvPointageheuresup;
import fr.cggveritas.crewintranet.jms.entities.CvPointage;
import fr.cggveritas.crewintranet.jms.entities.CvTravail;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

/**
 *
 * @author Alassane
 */
public class CvTravailJpaController extends DaoImp implements Serializable {

    public CvTravailJpaController() {
        super();
    }

    public void create(CvTravail cvTravail) throws IllegalOrphanException, PreexistingEntityException, Exception {
        if (cvTravail.getCvHistoriquechangementsalaireList() == null) {
            cvTravail.setCvHistoriquechangementsalaireList(new ArrayList<CvHistoriquechangementsalaire>());
        }
        if (cvTravail.getCvTravailprimeList() == null) {
            cvTravail.setCvTravailprimeList(new ArrayList<CvTravailprime>());
        }
        if (cvTravail.getCvPointageheuresupList() == null) {
            cvTravail.setCvPointageheuresupList(new ArrayList<CvPointageheuresup>());
        }
        if (cvTravail.getCvPointageList() == null) {
            cvTravail.setCvPointageList(new ArrayList<CvPointage>());
        }
        List<String> illegalOrphanMessages = null;
        CvTravailleur cvTravailleurOrphanCheck = cvTravail.getCvTravailleur();
        if (cvTravailleurOrphanCheck != null) {
            CvTravail oldCvTravailOfCvTravailleur = cvTravailleurOrphanCheck.getCvTravail();
            if (oldCvTravailOfCvTravailleur != null) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("The CvTravailleur " + cvTravailleurOrphanCheck + " already has an item of type CvTravail whose cvTravailleur column cannot be null. Please make another selection for the cvTravailleur field.");
            }
        }
        if (illegalOrphanMessages != null) {
            throw new IllegalOrphanException(illegalOrphanMessages);
        }
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            CvCompagnie idcompagnie = cvTravail.getIdcompagnie();
            if (idcompagnie != null) {
                idcompagnie = em.getReference(idcompagnie.getClass(), idcompagnie.getIdcompagnie());
                cvTravail.setIdcompagnie(idcompagnie);
            }
            CvTypedecontrat typecontrat = cvTravail.getTypecontrat();
            if (typecontrat != null) {
                typecontrat = em.getReference(typecontrat.getClass(), typecontrat.getTypecontrat());
                cvTravail.setTypecontrat(typecontrat);
            }
            CvTravailleur cvTravailleur = cvTravail.getCvTravailleur();
            if (cvTravailleur != null) {
                cvTravailleur = em.getReference(cvTravailleur.getClass(), cvTravailleur.getId());
                cvTravail.setCvTravailleur(cvTravailleur);
            }
            CvSalaire cvSalaire = cvTravail.getCvSalaire();
            if (cvSalaire != null) {
                cvSalaire = em.getReference(cvSalaire.getClass(), cvSalaire.getCvTravailleurId());
                cvTravail.setCvSalaire(cvSalaire);
            }
            List<CvHistoriquechangementsalaire> attachedCvHistoriquechangementsalaireList = new ArrayList<CvHistoriquechangementsalaire>();
            for (CvHistoriquechangementsalaire cvHistoriquechangementsalaireListCvHistoriquechangementsalaireToAttach : cvTravail.getCvHistoriquechangementsalaireList()) {
                cvHistoriquechangementsalaireListCvHistoriquechangementsalaireToAttach = em.getReference(cvHistoriquechangementsalaireListCvHistoriquechangementsalaireToAttach.getClass(), cvHistoriquechangementsalaireListCvHistoriquechangementsalaireToAttach.getId());
                attachedCvHistoriquechangementsalaireList.add(cvHistoriquechangementsalaireListCvHistoriquechangementsalaireToAttach);
            }
            cvTravail.setCvHistoriquechangementsalaireList(attachedCvHistoriquechangementsalaireList);
            List<CvTravailprime> attachedCvTravailprimeList = new ArrayList<CvTravailprime>();
            for (CvTravailprime cvTravailprimeListCvTravailprimeToAttach : cvTravail.getCvTravailprimeList()) {
                cvTravailprimeListCvTravailprimeToAttach = em.getReference(cvTravailprimeListCvTravailprimeToAttach.getClass(), cvTravailprimeListCvTravailprimeToAttach.getCvTravailprimePK());
                attachedCvTravailprimeList.add(cvTravailprimeListCvTravailprimeToAttach);
            }
            cvTravail.setCvTravailprimeList(attachedCvTravailprimeList);
            List<CvPointageheuresup> attachedCvPointageheuresupList = new ArrayList<CvPointageheuresup>();
            for (CvPointageheuresup cvPointageheuresupListCvPointageheuresupToAttach : cvTravail.getCvPointageheuresupList()) {
                cvPointageheuresupListCvPointageheuresupToAttach = em.getReference(cvPointageheuresupListCvPointageheuresupToAttach.getClass(), cvPointageheuresupListCvPointageheuresupToAttach.getId());
                attachedCvPointageheuresupList.add(cvPointageheuresupListCvPointageheuresupToAttach);
            }
            cvTravail.setCvPointageheuresupList(attachedCvPointageheuresupList);
            List<CvPointage> attachedCvPointageList = new ArrayList<CvPointage>();
            for (CvPointage cvPointageListCvPointageToAttach : cvTravail.getCvPointageList()) {
                cvPointageListCvPointageToAttach = em.getReference(cvPointageListCvPointageToAttach.getClass(), cvPointageListCvPointageToAttach.getId());
                attachedCvPointageList.add(cvPointageListCvPointageToAttach);
            }
            cvTravail.setCvPointageList(attachedCvPointageList);
            em.persist(cvTravail);
            if (idcompagnie != null) {
                idcompagnie.getCvTravailList().add(cvTravail);
                idcompagnie = em.merge(idcompagnie);
            }
            if (typecontrat != null) {
                typecontrat.getCvTravailList().add(cvTravail);
                typecontrat = em.merge(typecontrat);
            }
            if (cvTravailleur != null) {
                cvTravailleur.setCvTravail(cvTravail);
                cvTravailleur = em.merge(cvTravailleur);
            }
            if (cvSalaire != null) {
                CvTravail oldCvTravailOfCvSalaire = cvSalaire.getCvTravail();
                if (oldCvTravailOfCvSalaire != null) {
                    oldCvTravailOfCvSalaire.setCvSalaire(null);
                    oldCvTravailOfCvSalaire = em.merge(oldCvTravailOfCvSalaire);
                }
                cvSalaire.setCvTravail(cvTravail);
                cvSalaire = em.merge(cvSalaire);
            }
            for (CvHistoriquechangementsalaire cvHistoriquechangementsalaireListCvHistoriquechangementsalaire : cvTravail.getCvHistoriquechangementsalaireList()) {
                CvTravail oldTravailleurIdOfCvHistoriquechangementsalaireListCvHistoriquechangementsalaire = cvHistoriquechangementsalaireListCvHistoriquechangementsalaire.getTravailleurId();
                cvHistoriquechangementsalaireListCvHistoriquechangementsalaire.setTravailleurId(cvTravail);
                cvHistoriquechangementsalaireListCvHistoriquechangementsalaire = em.merge(cvHistoriquechangementsalaireListCvHistoriquechangementsalaire);
                if (oldTravailleurIdOfCvHistoriquechangementsalaireListCvHistoriquechangementsalaire != null) {
                    oldTravailleurIdOfCvHistoriquechangementsalaireListCvHistoriquechangementsalaire.getCvHistoriquechangementsalaireList().remove(cvHistoriquechangementsalaireListCvHistoriquechangementsalaire);
                    oldTravailleurIdOfCvHistoriquechangementsalaireListCvHistoriquechangementsalaire = em.merge(oldTravailleurIdOfCvHistoriquechangementsalaireListCvHistoriquechangementsalaire);
                }
            }
            for (CvTravailprime cvTravailprimeListCvTravailprime : cvTravail.getCvTravailprimeList()) {
                CvTravail oldCvTravailOfCvTravailprimeListCvTravailprime = cvTravailprimeListCvTravailprime.getCvTravail();
                cvTravailprimeListCvTravailprime.setCvTravail(cvTravail);
                cvTravailprimeListCvTravailprime = em.merge(cvTravailprimeListCvTravailprime);
                if (oldCvTravailOfCvTravailprimeListCvTravailprime != null) {
                    oldCvTravailOfCvTravailprimeListCvTravailprime.getCvTravailprimeList().remove(cvTravailprimeListCvTravailprime);
                    oldCvTravailOfCvTravailprimeListCvTravailprime = em.merge(oldCvTravailOfCvTravailprimeListCvTravailprime);
                }
            }
            for (CvPointageheuresup cvPointageheuresupListCvPointageheuresup : cvTravail.getCvPointageheuresupList()) {
                CvTravail oldCvTravailCvTravailleurIdOfCvPointageheuresupListCvPointageheuresup = cvPointageheuresupListCvPointageheuresup.getCvTravailCvTravailleurId();
                cvPointageheuresupListCvPointageheuresup.setCvTravailCvTravailleurId(cvTravail);
                cvPointageheuresupListCvPointageheuresup = em.merge(cvPointageheuresupListCvPointageheuresup);
                if (oldCvTravailCvTravailleurIdOfCvPointageheuresupListCvPointageheuresup != null) {
                    oldCvTravailCvTravailleurIdOfCvPointageheuresupListCvPointageheuresup.getCvPointageheuresupList().remove(cvPointageheuresupListCvPointageheuresup);
                    oldCvTravailCvTravailleurIdOfCvPointageheuresupListCvPointageheuresup = em.merge(oldCvTravailCvTravailleurIdOfCvPointageheuresupListCvPointageheuresup);
                }
            }
            for (CvPointage cvPointageListCvPointage : cvTravail.getCvPointageList()) {
                CvTravail oldTravailleurIdOfCvPointageListCvPointage = cvPointageListCvPointage.getTravailleurId();
                cvPointageListCvPointage.setTravailleurId(cvTravail);
                cvPointageListCvPointage = em.merge(cvPointageListCvPointage);
                if (oldTravailleurIdOfCvPointageListCvPointage != null) {
                    oldTravailleurIdOfCvPointageListCvPointage.getCvPointageList().remove(cvPointageListCvPointage);
                    oldTravailleurIdOfCvPointageListCvPointage = em.merge(oldTravailleurIdOfCvPointageListCvPointage);
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            if (findCvTravail(cvTravail.getCvTravailleurId()) != null) {
                throw new PreexistingEntityException("CvTravail " + cvTravail + " already exists.", ex);
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void edit(CvTravail cvTravail) throws IllegalOrphanException, NonexistentEntityException, Exception {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            CvTravail persistentCvTravail = em.find(CvTravail.class, cvTravail.getCvTravailleurId());
            CvCompagnie idcompagnieOld = persistentCvTravail.getIdcompagnie();
            CvCompagnie idcompagnieNew = cvTravail.getIdcompagnie();
            CvTypedecontrat typecontratOld = persistentCvTravail.getTypecontrat();
            CvTypedecontrat typecontratNew = cvTravail.getTypecontrat();
            CvTravailleur cvTravailleurOld = persistentCvTravail.getCvTravailleur();
            CvTravailleur cvTravailleurNew = cvTravail.getCvTravailleur();
            CvSalaire cvSalaireOld = persistentCvTravail.getCvSalaire();
            CvSalaire cvSalaireNew = cvTravail.getCvSalaire();
            List<CvHistoriquechangementsalaire> cvHistoriquechangementsalaireListOld = persistentCvTravail.getCvHistoriquechangementsalaireList();
            List<CvHistoriquechangementsalaire> cvHistoriquechangementsalaireListNew = cvTravail.getCvHistoriquechangementsalaireList();
            List<CvTravailprime> cvTravailprimeListOld = persistentCvTravail.getCvTravailprimeList();
            List<CvTravailprime> cvTravailprimeListNew = cvTravail.getCvTravailprimeList();
            List<CvPointageheuresup> cvPointageheuresupListOld = persistentCvTravail.getCvPointageheuresupList();
            List<CvPointageheuresup> cvPointageheuresupListNew = cvTravail.getCvPointageheuresupList();
            List<CvPointage> cvPointageListOld = persistentCvTravail.getCvPointageList();
            List<CvPointage> cvPointageListNew = cvTravail.getCvPointageList();
            List<String> illegalOrphanMessages = null;
            if (cvTravailleurNew != null && !cvTravailleurNew.equals(cvTravailleurOld)) {
                CvTravail oldCvTravailOfCvTravailleur = cvTravailleurNew.getCvTravail();
                if (oldCvTravailOfCvTravailleur != null) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("The CvTravailleur " + cvTravailleurNew + " already has an item of type CvTravail whose cvTravailleur column cannot be null. Please make another selection for the cvTravailleur field.");
                }
            }
            if (cvSalaireOld != null && !cvSalaireOld.equals(cvSalaireNew)) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("You must retain CvSalaire " + cvSalaireOld + " since its cvTravail field is not nullable.");
            }
            for (CvTravailprime cvTravailprimeListOldCvTravailprime : cvTravailprimeListOld) {
                if (!cvTravailprimeListNew.contains(cvTravailprimeListOldCvTravailprime)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain CvTravailprime " + cvTravailprimeListOldCvTravailprime + " since its cvTravail field is not nullable.");
                }
            }
            for (CvPointageheuresup cvPointageheuresupListOldCvPointageheuresup : cvPointageheuresupListOld) {
                if (!cvPointageheuresupListNew.contains(cvPointageheuresupListOldCvPointageheuresup)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain CvPointageheuresup " + cvPointageheuresupListOldCvPointageheuresup + " since its cvTravailCvTravailleurId field is not nullable.");
                }
            }
            for (CvPointage cvPointageListOldCvPointage : cvPointageListOld) {
                if (!cvPointageListNew.contains(cvPointageListOldCvPointage)) {
                    if (illegalOrphanMessages == null) {
                        illegalOrphanMessages = new ArrayList<String>();
                    }
                    illegalOrphanMessages.add("You must retain CvPointage " + cvPointageListOldCvPointage + " since its travailleurId field is not nullable.");
                }
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            if (idcompagnieNew != null) {
                idcompagnieNew = em.getReference(idcompagnieNew.getClass(), idcompagnieNew.getIdcompagnie());
                cvTravail.setIdcompagnie(idcompagnieNew);
            }
            if (typecontratNew != null) {
                typecontratNew = em.getReference(typecontratNew.getClass(), typecontratNew.getTypecontrat());
                cvTravail.setTypecontrat(typecontratNew);
            }
            if (cvTravailleurNew != null) {
                cvTravailleurNew = em.getReference(cvTravailleurNew.getClass(), cvTravailleurNew.getId());
                cvTravail.setCvTravailleur(cvTravailleurNew);
            }
            if (cvSalaireNew != null) {
                cvSalaireNew = em.getReference(cvSalaireNew.getClass(), cvSalaireNew.getCvTravailleurId());
                cvTravail.setCvSalaire(cvSalaireNew);
            }
            List<CvHistoriquechangementsalaire> attachedCvHistoriquechangementsalaireListNew = new ArrayList<CvHistoriquechangementsalaire>();
            for (CvHistoriquechangementsalaire cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaireToAttach : cvHistoriquechangementsalaireListNew) {
                cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaireToAttach = em.getReference(cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaireToAttach.getClass(), cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaireToAttach.getId());
                attachedCvHistoriquechangementsalaireListNew.add(cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaireToAttach);
            }
            cvHistoriquechangementsalaireListNew = attachedCvHistoriquechangementsalaireListNew;
            cvTravail.setCvHistoriquechangementsalaireList(cvHistoriquechangementsalaireListNew);
            List<CvTravailprime> attachedCvTravailprimeListNew = new ArrayList<CvTravailprime>();
            for (CvTravailprime cvTravailprimeListNewCvTravailprimeToAttach : cvTravailprimeListNew) {
                cvTravailprimeListNewCvTravailprimeToAttach = em.getReference(cvTravailprimeListNewCvTravailprimeToAttach.getClass(), cvTravailprimeListNewCvTravailprimeToAttach.getCvTravailprimePK());
                attachedCvTravailprimeListNew.add(cvTravailprimeListNewCvTravailprimeToAttach);
            }
            cvTravailprimeListNew = attachedCvTravailprimeListNew;
            cvTravail.setCvTravailprimeList(cvTravailprimeListNew);
            List<CvPointageheuresup> attachedCvPointageheuresupListNew = new ArrayList<CvPointageheuresup>();
            for (CvPointageheuresup cvPointageheuresupListNewCvPointageheuresupToAttach : cvPointageheuresupListNew) {
                cvPointageheuresupListNewCvPointageheuresupToAttach = em.getReference(cvPointageheuresupListNewCvPointageheuresupToAttach.getClass(), cvPointageheuresupListNewCvPointageheuresupToAttach.getId());
                attachedCvPointageheuresupListNew.add(cvPointageheuresupListNewCvPointageheuresupToAttach);
            }
            cvPointageheuresupListNew = attachedCvPointageheuresupListNew;
            cvTravail.setCvPointageheuresupList(cvPointageheuresupListNew);
            List<CvPointage> attachedCvPointageListNew = new ArrayList<CvPointage>();
            for (CvPointage cvPointageListNewCvPointageToAttach : cvPointageListNew) {
                cvPointageListNewCvPointageToAttach = em.getReference(cvPointageListNewCvPointageToAttach.getClass(), cvPointageListNewCvPointageToAttach.getId());
                attachedCvPointageListNew.add(cvPointageListNewCvPointageToAttach);
            }
            cvPointageListNew = attachedCvPointageListNew;
            cvTravail.setCvPointageList(cvPointageListNew);
            cvTravail = em.merge(cvTravail);
            if (idcompagnieOld != null && !idcompagnieOld.equals(idcompagnieNew)) {
                idcompagnieOld.getCvTravailList().remove(cvTravail);
                idcompagnieOld = em.merge(idcompagnieOld);
            }
            if (idcompagnieNew != null && !idcompagnieNew.equals(idcompagnieOld)) {
                idcompagnieNew.getCvTravailList().add(cvTravail);
                idcompagnieNew = em.merge(idcompagnieNew);
            }
            if (typecontratOld != null && !typecontratOld.equals(typecontratNew)) {
                typecontratOld.getCvTravailList().remove(cvTravail);
                typecontratOld = em.merge(typecontratOld);
            }
            if (typecontratNew != null && !typecontratNew.equals(typecontratOld)) {
                typecontratNew.getCvTravailList().add(cvTravail);
                typecontratNew = em.merge(typecontratNew);
            }
            if (cvTravailleurOld != null && !cvTravailleurOld.equals(cvTravailleurNew)) {
                cvTravailleurOld.setCvTravail(null);
                cvTravailleurOld = em.merge(cvTravailleurOld);
            }
            if (cvTravailleurNew != null && !cvTravailleurNew.equals(cvTravailleurOld)) {
                cvTravailleurNew.setCvTravail(cvTravail);
                cvTravailleurNew = em.merge(cvTravailleurNew);
            }
            if (cvSalaireNew != null && !cvSalaireNew.equals(cvSalaireOld)) {
                CvTravail oldCvTravailOfCvSalaire = cvSalaireNew.getCvTravail();
                if (oldCvTravailOfCvSalaire != null) {
                    oldCvTravailOfCvSalaire.setCvSalaire(null);
                    oldCvTravailOfCvSalaire = em.merge(oldCvTravailOfCvSalaire);
                }
                cvSalaireNew.setCvTravail(cvTravail);
                cvSalaireNew = em.merge(cvSalaireNew);
            }
            for (CvHistoriquechangementsalaire cvHistoriquechangementsalaireListOldCvHistoriquechangementsalaire : cvHistoriquechangementsalaireListOld) {
                if (!cvHistoriquechangementsalaireListNew.contains(cvHistoriquechangementsalaireListOldCvHistoriquechangementsalaire)) {
                    cvHistoriquechangementsalaireListOldCvHistoriquechangementsalaire.setTravailleurId(null);
                    cvHistoriquechangementsalaireListOldCvHistoriquechangementsalaire = em.merge(cvHistoriquechangementsalaireListOldCvHistoriquechangementsalaire);
                }
            }
            for (CvHistoriquechangementsalaire cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire : cvHistoriquechangementsalaireListNew) {
                if (!cvHistoriquechangementsalaireListOld.contains(cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire)) {
                    CvTravail oldTravailleurIdOfCvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire = cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire.getTravailleurId();
                    cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire.setTravailleurId(cvTravail);
                    cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire = em.merge(cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire);
                    if (oldTravailleurIdOfCvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire != null && !oldTravailleurIdOfCvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire.equals(cvTravail)) {
                        oldTravailleurIdOfCvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire.getCvHistoriquechangementsalaireList().remove(cvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire);
                        oldTravailleurIdOfCvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire = em.merge(oldTravailleurIdOfCvHistoriquechangementsalaireListNewCvHistoriquechangementsalaire);
                    }
                }
            }
            for (CvTravailprime cvTravailprimeListNewCvTravailprime : cvTravailprimeListNew) {
                if (!cvTravailprimeListOld.contains(cvTravailprimeListNewCvTravailprime)) {
                    CvTravail oldCvTravailOfCvTravailprimeListNewCvTravailprime = cvTravailprimeListNewCvTravailprime.getCvTravail();
                    cvTravailprimeListNewCvTravailprime.setCvTravail(cvTravail);
                    cvTravailprimeListNewCvTravailprime = em.merge(cvTravailprimeListNewCvTravailprime);
                    if (oldCvTravailOfCvTravailprimeListNewCvTravailprime != null && !oldCvTravailOfCvTravailprimeListNewCvTravailprime.equals(cvTravail)) {
                        oldCvTravailOfCvTravailprimeListNewCvTravailprime.getCvTravailprimeList().remove(cvTravailprimeListNewCvTravailprime);
                        oldCvTravailOfCvTravailprimeListNewCvTravailprime = em.merge(oldCvTravailOfCvTravailprimeListNewCvTravailprime);
                    }
                }
            }
            for (CvPointageheuresup cvPointageheuresupListNewCvPointageheuresup : cvPointageheuresupListNew) {
                if (!cvPointageheuresupListOld.contains(cvPointageheuresupListNewCvPointageheuresup)) {
                    CvTravail oldCvTravailCvTravailleurIdOfCvPointageheuresupListNewCvPointageheuresup = cvPointageheuresupListNewCvPointageheuresup.getCvTravailCvTravailleurId();
                    cvPointageheuresupListNewCvPointageheuresup.setCvTravailCvTravailleurId(cvTravail);
                    cvPointageheuresupListNewCvPointageheuresup = em.merge(cvPointageheuresupListNewCvPointageheuresup);
                    if (oldCvTravailCvTravailleurIdOfCvPointageheuresupListNewCvPointageheuresup != null && !oldCvTravailCvTravailleurIdOfCvPointageheuresupListNewCvPointageheuresup.equals(cvTravail)) {
                        oldCvTravailCvTravailleurIdOfCvPointageheuresupListNewCvPointageheuresup.getCvPointageheuresupList().remove(cvPointageheuresupListNewCvPointageheuresup);
                        oldCvTravailCvTravailleurIdOfCvPointageheuresupListNewCvPointageheuresup = em.merge(oldCvTravailCvTravailleurIdOfCvPointageheuresupListNewCvPointageheuresup);
                    }
                }
            }
            for (CvPointage cvPointageListNewCvPointage : cvPointageListNew) {
                if (!cvPointageListOld.contains(cvPointageListNewCvPointage)) {
                    CvTravail oldTravailleurIdOfCvPointageListNewCvPointage = cvPointageListNewCvPointage.getTravailleurId();
                    cvPointageListNewCvPointage.setTravailleurId(cvTravail);
                    cvPointageListNewCvPointage = em.merge(cvPointageListNewCvPointage);
                    if (oldTravailleurIdOfCvPointageListNewCvPointage != null && !oldTravailleurIdOfCvPointageListNewCvPointage.equals(cvTravail)) {
                        oldTravailleurIdOfCvPointageListNewCvPointage.getCvPointageList().remove(cvPointageListNewCvPointage);
                        oldTravailleurIdOfCvPointageListNewCvPointage = em.merge(oldTravailleurIdOfCvPointageListNewCvPointage);
                    }
                }
            }
            em.getTransaction().commit();
        } catch (Exception ex) {
            String msg = ex.getLocalizedMessage();
            if (msg == null || msg.length() == 0) {
                Integer id = cvTravail.getCvTravailleurId();
                if (findCvTravail(id) == null) {
                    throw new NonexistentEntityException("The cvTravail with id " + id + " no longer exists.");
                }
            }
            throw ex;
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public void destroy(Integer id) throws IllegalOrphanException, NonexistentEntityException {
        EntityManager em = null;
        try {
            em = getEntityManager();
            em.getTransaction().begin();
            CvTravail cvTravail;
            try {
                cvTravail = em.getReference(CvTravail.class, id);
                cvTravail.getCvTravailleurId();
            } catch (EntityNotFoundException enfe) {
                throw new NonexistentEntityException("The cvTravail with id " + id + " no longer exists.", enfe);
            }
            List<String> illegalOrphanMessages = null;
            CvSalaire cvSalaireOrphanCheck = cvTravail.getCvSalaire();
            if (cvSalaireOrphanCheck != null) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This CvTravail (" + cvTravail + ") cannot be destroyed since the CvSalaire " + cvSalaireOrphanCheck + " in its cvSalaire field has a non-nullable cvTravail field.");
            }
            List<CvTravailprime> cvTravailprimeListOrphanCheck = cvTravail.getCvTravailprimeList();
            for (CvTravailprime cvTravailprimeListOrphanCheckCvTravailprime : cvTravailprimeListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This CvTravail (" + cvTravail + ") cannot be destroyed since the CvTravailprime " + cvTravailprimeListOrphanCheckCvTravailprime + " in its cvTravailprimeList field has a non-nullable cvTravail field.");
            }
            List<CvPointageheuresup> cvPointageheuresupListOrphanCheck = cvTravail.getCvPointageheuresupList();
            for (CvPointageheuresup cvPointageheuresupListOrphanCheckCvPointageheuresup : cvPointageheuresupListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This CvTravail (" + cvTravail + ") cannot be destroyed since the CvPointageheuresup " + cvPointageheuresupListOrphanCheckCvPointageheuresup + " in its cvPointageheuresupList field has a non-nullable cvTravailCvTravailleurId field.");
            }
            List<CvPointage> cvPointageListOrphanCheck = cvTravail.getCvPointageList();
            for (CvPointage cvPointageListOrphanCheckCvPointage : cvPointageListOrphanCheck) {
                if (illegalOrphanMessages == null) {
                    illegalOrphanMessages = new ArrayList<String>();
                }
                illegalOrphanMessages.add("This CvTravail (" + cvTravail + ") cannot be destroyed since the CvPointage " + cvPointageListOrphanCheckCvPointage + " in its cvPointageList field has a non-nullable travailleurId field.");
            }
            if (illegalOrphanMessages != null) {
                throw new IllegalOrphanException(illegalOrphanMessages);
            }
            CvCompagnie idcompagnie = cvTravail.getIdcompagnie();
            if (idcompagnie != null) {
                idcompagnie.getCvTravailList().remove(cvTravail);
                idcompagnie = em.merge(idcompagnie);
            }
            CvTypedecontrat typecontrat = cvTravail.getTypecontrat();
            if (typecontrat != null) {
                typecontrat.getCvTravailList().remove(cvTravail);
                typecontrat = em.merge(typecontrat);
            }
            CvTravailleur cvTravailleur = cvTravail.getCvTravailleur();
            if (cvTravailleur != null) {
                cvTravailleur.setCvTravail(null);
                cvTravailleur = em.merge(cvTravailleur);
            }
            List<CvHistoriquechangementsalaire> cvHistoriquechangementsalaireList = cvTravail.getCvHistoriquechangementsalaireList();
            for (CvHistoriquechangementsalaire cvHistoriquechangementsalaireListCvHistoriquechangementsalaire : cvHistoriquechangementsalaireList) {
                cvHistoriquechangementsalaireListCvHistoriquechangementsalaire.setTravailleurId(null);
                cvHistoriquechangementsalaireListCvHistoriquechangementsalaire = em.merge(cvHistoriquechangementsalaireListCvHistoriquechangementsalaire);
            }
            em.remove(cvTravail);
            em.getTransaction().commit();
        } finally {
            if (em != null) {
                em.close();
            }
        }
    }

    public List<CvTravail> findCvTravailEntities() {
        return findCvTravailEntities(true, -1, -1);
    }

    public List<CvTravail> findCvTravailEntities(int maxResults, int firstResult) {
        return findCvTravailEntities(false, maxResults, firstResult);
    }

    private List<CvTravail> findCvTravailEntities(boolean all, int maxResults, int firstResult) {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            cq.select(cq.from(CvTravail.class));
            Query q = em.createQuery(cq);
            if (!all) {
                q.setMaxResults(maxResults);
                q.setFirstResult(firstResult);
            }
            return q.getResultList();
        } finally {
            em.close();
        }
    }

    public CvTravail findCvTravail(Integer id) {
        EntityManager em = getEntityManager();
        try {
            return em.find(CvTravail.class, id);
        } finally {
            em.close();
        }
    }

    public int getCvTravailCount() {
        EntityManager em = getEntityManager();
        try {
            CriteriaQuery cq = em.getCriteriaBuilder().createQuery();
            Root<CvTravail> rt = cq.from(CvTravail.class);
            cq.select(em.getCriteriaBuilder().count(rt));
            Query q = em.createQuery(cq);
            return ((Long) q.getSingleResult()).intValue();
        } finally {
            em.close();
        }
    }
    
}
